

#include <iostream>
#include <string>
#include <vector>
#include <boost/smart_ptr.hpp>
#include <boost/thread/thread.hpp>
#include <boost/make_shared.hpp>
#include <boost/weak_ptr.hpp>
using namespace std;

class tester
{
public:
    tester() {}
    ~tester() {}
    // 更多的函数定义…
};

void fun(boost::weak_ptr<tester> wp)
{
    boost::shared_ptr<tester> sp = wp.lock();
    if (sp)
    {
        // 在这里可以安全的使用sp指针.
        std::cout << "安全使用!" << std::endl;
    }
    else
    {
        std::cout << "指针已被释放!" << std::endl;
    }
}

int main()
{
    boost::shared_ptr<tester> sp1(new tester);
    boost::weak_ptr<tester> wp(sp1);
    // 开启两个线程，并将智能指针传入使用。
    boost::thread t1(boost::bind(&fun, wp));
    boost::thread t2(boost::bind(&fun, wp));
    t1.join();
    t2.join();

    std::cout<< "use count" << sp1.use_count() << std::endl;
    return 0;
}


